package com.jia.springcloud.controller;

import com.jia.springcloud.pojo.Dept;
import com.jia.springcloud.service.DeptService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author 1038940655
 * @create 2021/1/13 17:35
 */

//提供RestFul服
@RestController
public class DeptController {
    @Autowired
    private DeptService deptService;
    
//    获取一些配置信息具体到一些微服务
    @Autowired
    private DiscoveryClient discoveryClient;



//    拿这个方法举例子（如果这个方法崩溃了出现异常，熔断机制可以解决）要加个注解才可以
    @HystrixCommand(fallbackMethod = "hystrix")
    @RequestMapping("/dept/queryDeptById/{deptno}")
    public Dept queryDeptById(@PathVariable("deptno") Integer deptno){

        Dept dept = deptService.queryDeptById(deptno);//如果传递的id在数据库中不存在，就会出现空指针的异常

        if(dept == null){
            throw new RuntimeException("id=>"+deptno+"，不存在该用户或信息无法找到");//要抛出这个异常，hystrix会自动获取这个异常并走令外一个方法
        }
        return dept;
    }
//这里后台会报错，但是前台则正常返回字符串
//    备选方法就是hystrix在捕获异常之后走的方法
    public Dept hystrix(@PathVariable("deptno") Integer deptno){
        return new Dept()
                   .setDname("id=>"+deptno+"没有对应的信息，null--@Hystrix")
                   .setDb_source("no this database in Mysql");
    }

}
